package com.xm.thread;

import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 核心线程数：常驻线程，即使空闲也不会被回收
 * 最大线程数：突发流量时允许扩展的最大线程数
 * 存活时间：非核心线程的空闲存活时间
 * 队列类型：
 *   LinkedBlockingQueue：无界队列（小心 OOM）
 *   ArrayBlockingQueue：有界队列
 *   SynchronousQueue：直接传递队列
 * 拒绝策略
 *   AbortPolicy：默认策略，直接抛异常
 *   CallerRunsPolicy：用调用者线程执行任务
 *   DiscardOldestPolicy：丢弃队列最旧任务
 *   DiscardPolicy：静默丢弃新任务
 */
public class ExecutorService01 {
    public static void main(String[] args) {
        ThreadPoolExecutor executor = new ThreadPoolExecutor(
                4,
                10,
                60L,
                TimeUnit.SECONDS,
                new LinkedBlockingDeque<>(100),
                new ThreadPoolExecutor.CallerRunsPolicy()
        );
    }
}
